﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using log4net;
using Iudicium.Servicios;
using Iudicium.Actividades.CRN;
using Iudicium.Servicio;
using Iudicium.Servicio.CRN;
using Iudicium.Tramites.CRN;

public partial class Servicios_Actividad_FormularioActividad : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger("LogFile");

    private int ActividadId
    {
        set { ActividadIdHiddenField.Value = value.ToString(); }
        get
        {
            int actividadId = 0;
            try
            {
                actividadId = Convert.ToInt32(ActividadIdHiddenField.Value);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo convertir ActividadIdHiddenField.Value a un valor entero", ex);
            }
            return actividadId;
        }
    }

    private int ServicioId
    {
        set { ServicioIdHiddenField.Value = value.ToString(); }
        get
        {
            int servicioId = 0;
            try
            {
                servicioId = Convert.ToInt32(ServicioIdHiddenField.Value);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo convertir ServicioIdHiddenField.Value a un valor entero", ex);
            }
            return servicioId;
        }
    }

    protected string BackToUrl
    {
        set { BackToUrlHiddenField.Value = value; }
        get { return BackToUrlHiddenField.Value; }
    }

    public string EstadoServicio
    {
        get { return EstadoServicioHiddenField.Value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ObtenerParametros();
        }
    }

    private void ObtenerParametros()
    {
        bool paramsComplete = false;
        if (Session["ActividadId"] != null && !string.IsNullOrEmpty(Session["ActividadId"].ToString()))
        {
            ActividadIdHiddenField.Value = Session["ActividadId"].ToString();
        }
        Session["ActividadId"] = null;

        if (Session["ServicioId"] != null && !string.IsNullOrEmpty(Session["ServicioId"].ToString()))
        {
            ServicioIdHiddenField.Value = Session["ServicioId"].ToString();
            paramsComplete = true;
        }
        Session["ServicioId"] = null;

        if (Session["ActividadBackToUrl"] != null && !string.IsNullOrEmpty(Session["ActividadBackToUrl"].ToString()))
        {
            BackToUrl = Session["ActividadBackToUrl"].ToString();
        }
        Session["ActividadBackToUrl"] = null;

        if (paramsComplete && ServicioId > 0)
        {
            try
            {
                Servicio objServicio = ServicioCRN.GetServicioById(ServicioId);
                MinDateLiteral.Text = "new Date(" + objServicio.FechaInicio.Year + "," + (objServicio.FechaInicio.Month - 1) + "," +
                    objServicio.FechaInicio.Day + ")";
            }
            catch (Exception ex)
            {
                log.Error("No se pudo obtener los datos del servicio " + ServicioId, ex);
            }
            CargarDatos();
        }
        else
            Redirect();
    }

    protected void CancelarLinkButton_Click(object sender, EventArgs e)
    {
        Redirect();
    }

    private void CargarDatos()
    {
        if (ActividadId <= 0)
            return;
        Actividad objActividad = null;
        try
        {
            objActividad = ActividadCRN.GetActividadById(ActividadId, ServicioId);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo obtener la Actividad con id: " + ActividadId, ex);
        }
        if (objActividad == null)
            return;

        SelectedDateLiteral.Text = "new Date(" + objActividad.FechaActividad.Year + "," + (objActividad.FechaActividad.Month - 1) + "," +
            objActividad.FechaActividad.Day + ");";
        DescripcionTextBox.Text = objActividad.Descripcion;
        ServicioIdHiddenField.Value = objActividad.ServicioId.ToString();
        FechaLiteral.Text = objActividad.FechaActividad.ToShortDateString();

        try
        {

            Servicio.TipoServicio tipo = ServicioCRN.GetTipoServicioByServicioId(ServicioId);
            if (tipo == Servicio.TipoServicio.Tramite)
            {
                Tramite objTramite = TramiteCRN.GetTramiteById(ServicioId);
                EstadoServicioHiddenField.Value = objTramite.Estado;
            }
        }
        catch (Exception ex)
        {
            log.Error("No se pudo obtener los datos del servicio", ex);
        }
        if (!EstadoServicio.Equals("En Proceso"))
        {
            DescripcionTextBox.ReadOnly = true;
            FechaLiteral.Visible = true;
            FechaTextBox.Visible = false;
            HelpImage.Visible = false;
            GuardarLinkButton.Visible = false;
            CancelarLinkButton.Text = "Volver";
        }
    }

    protected void GuardarLinkButton_Click(object sender, EventArgs e)
    {
        Actividad objActividad = new Actividad(ActividadId,ServicioId,Convert.ToDateTime(FechaTextBox.Text),DescripcionTextBox.Text,0);
        if (ActividadId == 0)
        {
            try
            {
                ActividadId = ActividadCRN.InsertActividad(objActividad);
                Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                    "El registro de la Actividad se realizó correctamente.",
                    Iudicium.Utilitarios.Notificacion.TipoNotificacion.Alert);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo insertar la Actividad", ex);
                Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                    "El registro de la Actividad no se pudo completar correctamente.",
                    Iudicium.Utilitarios.Notificacion.TipoNotificacion.Error);
                ControlNotificacion.Update();
                return;
            }
            
        }
        else
        {
            try
            {
                ActividadCRN.UpdateActividad(objActividad);

                Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                        "Los datos de la Actividad se editaron correctamente.",
                        Iudicium.Utilitarios.Notificacion.TipoNotificacion.Alert);
            }
            catch (Exception ex)
            {
                log.Error("No se pudo actualizar los datos de la Actividad", ex);
                Iudicium.Utilitarios.Notificacion.MostrarNotificacion(
                    "Los datos de la Actividad no se pudieron editar correctamente.",
                    Iudicium.Utilitarios.Notificacion.TipoNotificacion.Error);
                ControlNotificacion.Update();
                return;
            }
        }
        Redirect();

    }

    private void Redirect()
    {
        if (ServicioId > 0)
        {
            if (!string.IsNullOrEmpty(BackToUrl))
            {
                Session["ActividadBackToUrl"] = BackToUrl;
            }

            Session["ServicioId"] = ServicioId;
            Response.Redirect("~/Servicios/Actividad/ListaActividades.aspx");
        }
        else
        {
            Response.Redirect("~/Default.aspx");
        }
    }

}
